iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 22
1
AI & Data

大數據與AI研習實作與心得 系列 第 22

Python - [插播]小作業2-ii:快速排序法

  • 分享至 

  • xImage
  •  

快速排序法為氣泡排序的加強版
也是Divide and Swap
分割及交換的中心思想
WIKI

#QUICK SORT
data = [8 ,  2 ,  9,  7 , 3 ]
print("---- Before",data)

def quicksort(data, left, right): # 輸入資料,和從兩邊開始的位置
    if left >= right :            # 如果左邊大於右邊,就跳出function
        return

    i = left                      # 左邊的代理人
    j = right                     # 右邊的代理人
    key = data[left]                 # 基準點

    while i != j:                  
        while data[j] > key and i < j:   # 從右邊開始找,找比基準點小的值
            j -= 1
        while data[i] <= key and i < j:  # 從左邊開始找,找比基準點大的值
            i += 1
        if i < j:                        # 當左右代理人沒有相遇時,互換值
            data[i], data[j] = data[j], data[i] 

    # 將基準點歸換至代理人相遇點
    data[left] = data[i] 
    data[i] = key

    quicksort(data, left, i-1)   # 繼續處理較小部分的子循環
    quicksort(data, i+1, right)  # 繼續處理較大部分的子循環

quicksort(data, 0, len(data)-1)
print("----- After",data)

結果:
QUICK SORT...

---- Before [8, 2, 9, 7, 3]
----- After [2, 3, 7, 8, 9]


上一篇
Python - [插播]小作業2-i:氣泡排序法
下一篇
Python - 樂透之呼吸一の型:重抽法
系列文
大數據與AI研習實作與心得 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言